package com.smzd.framework.system.mappers;

import java.util.List;

import com.smzd.core.domain.Many2Many;
import com.smzd.core.mappers.IMapper;
import com.smzd.framework.system.domain.Role;
import com.smzd.framework.utils.db.RPage;

public interface RoleMapper extends IMapper<Role> {

    List<Role> getPrivilegeRolesByMeetingId(int meetingid);

    List<Role> getPrivilegeRolesByUserId(int userid);

    List<Role> getGroupRoleListByPage(RPage<Role> page);

    int getGroupRoleListCountByPage(RPage<Role> page);

    void insertGroupRole(Many2Many add);

    void removeGroupRole(Many2Many del);

    /**
     * getGroupRolesReduce: 如果一个分组授权被取消，会有哪些下级Meeting当中的分组授权会受到影响，返回这些分组
     * 
     * @param groupRole
     *            被取消或删除的分组授权
     * @return 会受影响的下级Meeting的分组授权
     */
    List<Many2Many> getGroupRolesReduce(Many2Many groupRole);

    /**
     * updateGroupRoleDisabled: 设置一个分组授权虽然存在但是不可用
     * 
     * @param groupRole
     */
    void updateGroupRoleDisabled(Many2Many groupRole);

    /**
     * 获取所有模块中的功能项所绑定的角色。<br>
     * 也可以直接返回角色列表中的所有信息。
     * 
     * @return
     */
    List<Role> getRolesInAllModules();

    /**
     * 获取权限组已分配的角色列表
     * 
     * @param page
     * @return
     */
    List<Role> getRolesByGroup(RPage<Role> page);

    /**
     * 获取权限组已分配的角色列表数量
     * 
     * @param page
     * @return
     */
    int getRolesCountByGroup(RPage<Role> page);

    /**
     * 最高权限者为权限组分配角色
     * 
     * @param page
     * @return
     */
    List<Role> getGroupRolesForMeeting0(RPage<Role> page);

    /**
     * 最高权限者为权限组分配角色
     * 
     * @param page
     * @return
     */
    int getGroupRolesCountForMeeting0(RPage<Role> page);

    /**
     * 会务所有者为权限组分配角色
     * 
     * @param page
     * @return
     */
    List<Role> getGroupRolesForOwner(RPage<Role> page);

    /**
     * 会务所有者为权限组分配角色
     * 
     * @param page
     * @return
     */
    int getGroupRolesCountForOwner(RPage<Role> page);

    /**
     * 为普通管理员为权限组分配角色
     * 
     * @param page
     * @return
     */
    List<Role> getGroupRolesForManager(RPage<Role> page);

    /**
     * 为普通管理员为权限组分配角色
     * 
     * @param page
     * @return
     */
    int getGroupRolesCountForManager(RPage<Role> page);
}
